package com.zhf.edupayboot.controller;

import com.github.wxpay.sdk.WXPayUtil;
import com.jfinal.kit.HttpKit;
import com.zhf.edupayboot.commons.PayConfig;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: ZhaoHuanfeng
 * @Date: 2021/1/4 18:30
 */

@RestController
@RequestMapping("order")
@CrossOrigin
public class WxPayController {

    @GetMapping("createCode")
    public Object createCode(String courseid,String coursename,String price) throws Exception {
        coursename = new String(coursename.getBytes("ISO-8859-1"),"UTF-8");
        //编写商户信息
        Map<String,String> mm=new HashMap<>();
        mm.put("appid", PayConfig.appid);  // 公众账号ID
        mm.put("mch_id",PayConfig.partner);// 商户号
        mm.put("nonce_str", WXPayUtil.generateNonceStr());//随机字符串
        mm.put("body",coursename); //商品简单描述
        mm.put("out_trade_no",WXPayUtil.generateNonceStr()); //随机生成的商户订单号
        mm.put("total_fee",price); // 订单金额,订单总金额，单位为分，只能为整数
        mm.put("spbill_create_ip","127.0.0.1"); // 终端IP
        mm.put("notify_url",PayConfig.notifyurl); //通知地址
        mm.put("trade_type","NATIVE"); //交易类型
//        System.out.println("商户信息："+mm);

        //生成数字签名并把商户信息转换成xml格式
        String xml = WXPayUtil.generateSignedXml(mm, PayConfig.partnerKey);
//        System.out.println("xml:"+xml);

        //将xml数据发送给微信支付平台，生成订单
        String url="https://api.mch.weixin.qq.com/pay/unifiedorder";

        //发送请求并返回一个xml格式的字符串
        String result = HttpKit.post(url, xml);

        //微信平台返回xml格式数据，将其转换成map格式并返回给前端
        Map<String, String> resultMap = WXPayUtil.xmlToMap(result);
        resultMap.put("orderId",mm.get("out_trade_no"));
//        System.out.println("返回的xml转换后的map"+resultMap);
        return resultMap;
    }

    @GetMapping("checkOrderStatus")
    public Object createCode(String orderId) throws Exception {
        //编写商户信息
        Map<String,String> mm=new HashMap<>();
        mm.put("appid", PayConfig.appid);  // 公众账号ID
        mm.put("mch_id",PayConfig.partner);// 商户号
        mm.put("out_trade_no", orderId);//订单号
        mm.put("nonce_str", WXPayUtil.generateNonceStr()); //随机字符串

        //生成数字签名
        String xml = WXPayUtil.generateSignedXml(mm, PayConfig.partnerKey);
        //发送查询请求到微信支付平台
        String url="https://api.mch.weixin.qq.com/pay/orderquery";

        //查询订单状态的开始时间
        long startTime = System.currentTimeMillis();
        //不停去微信平台查询结果进行处理
        while(true) {
            //每隔3秒请求一次
            Thread.sleep(3000);

            //对微信支付平台的查询结果进行处理
            String result = HttpKit.post(url, xml);
            Map<String, String> resultMap = WXPayUtil.xmlToMap(result);
            //已经支付成功
            if (resultMap.get("trade_state").equalsIgnoreCase("success")){
                return resultMap;
            }

            //超过30秒未支付停止询问
            if (System.currentTimeMillis()-startTime>30000){
                return resultMap;
            }
        }
    }
}
